home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / Libraries / SAT 2.3b4 / Demo ƒ / Collision][ demo ƒ / sMrEgghead.p < prev   
Text File  |  1994-11-21  |  2KB  |  78 lines

  1. { Player sprite for SATcollision][ }
  2.  
  3. unit sMrEgghead;
  4.  
  5. interface
  6.  
  7.     uses
  8. {$ifc UNDEFINED THINK_PASCAL}
  9.         Types, QuickDraw, Events, {}
  10. {$endc}
  11.         SAT;
  12.  
  13.     var
  14.         mrEggheadFaces: array[0..3] of FacePtr;
  15.         yuckFace: FacePtr;
  16.  
  17.     procedure InitMrEgghead;
  18.     procedure SetupMrEgghead (me: SpritePtr);
  19.     procedure HandleMrEgghead (me: SpritePtr);
  20.     procedure HitMrEgghead (me, him: SpritePtr);
  21.  
  22. implementation
  23.  
  24.     procedure InitMrEgghead;
  25.         var
  26.             i: integer;
  27.     begin
  28.         for i := 0 to 3 do
  29.             mrEggheadFaces[i] := SATGetFace(128 + i);
  30.         yuckFace := SATGetFace(134);
  31.     end;
  32.  
  33.     procedure SetupMrEgghead (me: SpritePtr);
  34.     begin
  35.         me^.mode := 0;
  36.         me^.speed.h := 1;
  37.         me^.kind := 1; {Friend kind}
  38.         SetRect(me^.hotRect, 0, 0, 32, 32);
  39.         me^.task := @HandleMrEgghead;
  40.         me^.hitTask := @HitMrEgghead;
  41.     end;
  42.  
  43.     procedure HandleMrEgghead (me: SpritePtr);
  44.     begin
  45.         GetMouse(me^.position);
  46. {GlobalToLocal here if desired}
  47.  
  48. {This time, let's make sure Mr Egghead is always visible!}
  49.         if me^.position.v < 0 then
  50.             me^.position.v := 0;
  51.         if me^.position.h < 0 then
  52.             me^.position.h := 0;
  53.         if me^.position.v > gSAT.offSizeV - 32 then
  54.             me^.position.v := gSAT.offSizeV - 32;
  55.         if me^.position.h > gSAT.offSizeH - 32 then
  56.             me^.position.h := gSAT.offSizeH - 32;
  57.  
  58.         if me^.mode < 0 then {we have taken a bite in a bad apple recently}
  59.             begin
  60.                 me^.face := yuckFace;
  61.                 me^.mode := me^.mode + 1;
  62.             end
  63.         else if me^.mode = 0 then {nothing special recently}
  64.             me^.face := mrEggheadFaces[2]
  65.         else
  66.             begin {ate an apple recently - chew!}
  67.                 me^.mode := me^.mode - 1;
  68.                 me^.face := mrEggheadFaces[me^.mode mod 4];
  69.             end;
  70.     end;
  71.  
  72.     procedure HitMrEgghead;
  73.     begin
  74. {Hit something! We can take whatever action we need here, but in this case, we let sApple decide.}
  75. {(We could have omitted this function altogether and passed nil.)}
  76.     end;
  77.  
  78. end.